const ajax = require('../../tool/ajax');
const login = require('../login/index');
const screen = require('../component/screen');//截图
let pupConfig, page, config, newUser;

/**
 * 实名认证
 */
const start = async (myPupConfig) => {
  pupConfig = myPupConfig;
  page = pupConfig.page;
  config = pupConfig.config.common;
  newUser = pupConfig.config.newUser;

  await login(pupConfig, newUser.id);//新用户登录
  await selectType();
  await fillUserInfo();
  await fillEmailInfo();
}

/**
 * 选择实名认证类型
 */
const selectType = async () => {
  //等待认证按钮加载
  await page.waitFor('button.ant-btn-block');
  //点击指定的认证按钮
  await page.click(`button.ant-btn-block:nth-child(${newUser.certificateType})`);
  //点击确定
  await page.click(`button.confirmButton`);
}

/**
 * 填写个人信息
 */
const fillUserInfo = async () => {
  //等待页面加载完成
  await page.waitFor('#country');

  //选择国家
  await page.click('#country');
  await page.waitFor('.ant-select-dropdown-menu-item');
  await page.click('.ant-select-dropdown-menu-item');

  //选择证件类型
  await page.click('#CredentialType');
  let selects = await page.$$('.ant-select-dropdown-menu-item');
  await selects[1].click();

  //上传身份证。当前页面需要先上传文件，因为上传成功后会进行OCR识别，然后刷新表单。
  let uploads = await page.$$('span.ant-upload input');
  //使用uploadFile()进行文件上传。如果使用相对路径，则相对于工程目录。
  await uploads[0].uploadFile(config.imgPathUpload + 'girl.png');
  //等待上传身份证成功
  await ajax.waitForResponse(page, 'getDataByOCR.do');
  await uploads[1].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'updFileStatus.do');

  //选择性别。注意：需要先上传身份证，再选择性别。
  await page.click('#gender');
  selects = await page.$$('.ant-select-dropdown-menu-item');
  await selects[2].click();

  //获取输入框数组
  let inputs = await page.$$('input[type=text]');
  await inputs[0].type(newUser.name);
  await inputs[1].type(newUser.idNumber);
  await inputs[2].type(newUser.idAddress);

  screen(page, '实名认证-填写个人信息');

  //点击确定
  await page.click(`button[type=submit]`);
  await ajax.waitForResponse(page, 'personalAuth.do');
}

/**
 * 填写邮箱信息
 */
const fillEmailInfo = async () => {
  //等待输入框按钮加载
  await page.waitFor('input[type=text]');

  //获取输入框数组
  let inputs = await page.$$('input[type=text]');
  await inputs[0].type(newUser.email);
  await inputs[1].type('123456');

  //发送验证码。先填写电话和邮箱，再发送验证码
  await page.click('a.zc-emailInfos-emailInput-send');
  await ajax.waitForResponse(page, 'sendMailOtp.do');

  //点击确定
  await page.click(`button[type=submit]`);
  await ajax.waitForResponse(page, 'personalAuth.do');
}

module.exports = start;